package com.qianli.cashmama.trade.client.trade;

import com.fqgj.common.api.Response;
import com.qianli.cashmama.trade.client.trade.request.*;
import com.qianli.cashmama.trade.client.trade.response.*;
import com.qianli.cashmama.trade.client.vo.UserLevelVO;
import com.qianli.cashmama.trade.common.enums.BizTypeEnum;

import java.util.Date;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: sm
 * Date: 2017/8/1
 * Time: 下午9:03
 */
public interface TradeQueryService {
    /**
     * @param tradeNo
     * @return
     */
    Response<TradeInfoResponse> queryByTradeNo(String tradeNo);

    /**
     * 查询三方审核通过订单
     * @param tradeNo
     * @return
     */
    Response<TTradeOpenOrderResponse> queryByOpenTradeNo(String tradeNo);

    /**
     * @param tradeNo
     * @return
     */
    Response<TradeExtraInfoResponse> queryExtraInfoByTradeNo(String tradeNo);

    /**
     * 根据bizNo查询trade信息
     *
     * @param bizNo
     * @param bizType
     * @return
     */
    Response<TradeInfoResponse> queryByBizNo(String bizNo, BizTypeEnum bizType);

    /**
     * 根据用户code和类目code获取用户最近的一笔订单
     *
     * @return
     */
    @Deprecated
    Response<TradeInfoResponse> queryUserLatestTradeByUserCodeAndTradeCategory(QueryUserLatestTradeRequest queryUserLatestTradeRequest);

    /**
     * 根据用户code和类目code获取用户最新的一笔订单
     * @param userLatestTradeQueryRO
     * @return
     */
    Response<TradeInfoRO> queryUserLatestTradeByUserCodeAndTradeCategory(UserLatestTradeQueryRO userLatestTradeQueryRO);

    /**
     * 根据userCode和订单状态查询订单列表
     * @param userTradeListQueryRO
     * @return
     */
    Response<List<TradeInfoRO>> queryTradeListByUserCodeAndOrderStatus(UserTradeListQueryRO userTradeListQueryRO);

    /**
     * 根据订单号查询订单合同信息
     * @param tradeNo
     * @return
     */
    Response<TradeContractRO> queryTradeContractByTradeNo(String tradeNo);

    /**
     * 查询用户的交易列表
     *
     * @param request
     */
    Response<UserTradeListResponse> queryUserTradeList(QueryUserTradeRequest request);

    /**
     * 查询进行中的订单
     * @param request
     * @return
     */
    Response<UserTradeROListResponse> queryUserTradeList(QueryTradeRORequest request);


    /**
     * 查询交易列表
     * @param request
     * @return
     */
    Response<TradeListResponse> queryUserTradeListByUserCodes(QueryTradesRequest request);

    /**
     * 根据userCode查询交易列表
     * @param userCode
     * @return
     */
    Response<TradeListResponse> queryUserTradeListByUserCode(String userCode);

    /**
     * @param request
     * @return
     */
    Response<TradeListResponse> queryTradeListByTradeNos(QueryTradeListRequest request);


    /**
     * 还款列表查询
     *
     * @param request
     * @return
     */
    Response<RepaymentListResponse> queryRepaymentList(QueryRepaymentListRequest request);


    /**
     * 临时接口
     *
     * @param orderIds
     * @return
     */
    Response<TradeListResponse> queryByOrderIds(List<Long> orderIds);


    /**
     * @param userCode
     * @return
     */
    Response<Integer> countUserSuccessTradeByUserCode(String userCode);

    /**
     * @param identityNo
     * @return
     */
    Response<Integer> countUserActiveTradeByIdentityNo(String identityNo);

    /**
     * 获取交易时间
     */
    Response<Date> getTradeDate();

    Response<UserLevelVO> getUserLevel(String userCode, String categoryCode,Integer level, String extraInfo);

    /**
     * 查询用户的订单数量
     * @param userCode
     * @param closed
     * @return
     */
    Response<Integer> countOrdersByUserCode(String userCode, Boolean closed);

    /**
     * 根据产品类目计算当天订单总数量
     * @param categoryCode
     * @return
     */
    Response<Integer> countCurrentDateOrdersByCategoryCode(String categoryCode);

    /**
     * 根据服务号查询服务费支付情况
     * @param serviceNo
     * @return
     */
    Response<ServiceTradeInfo> queryServiceTradeInfo(String serviceNo);

    /**
     * 是否需要支付会员费
     * @param userCode
     * @return
     */
    Response<Boolean> needPayUserServiceFee(String userCode);

    Response<Boolean> isWhiteUser(String value,Integer type,String productCategory);


}
